www.gusucode.com > 24Beta 虚拟主机版 1.0.0 Beta源码程序 > 24Beta 虚拟主机版 1.0.0 Beta源码程序/24Beta-1.0.0-vhost/library/framework/i18n/gettext/CGettextPoFile.php
<?php /** * CGettextPoFile class file. * * @author Qiang Xue <qiang.xue@gmail.com> * @link http://www.yiiframework.com/ * @copyright Copyright © 2008-2009 Yii Software LLC * @license http://www.yiiframework.com/license/ */ /** * CGettextPoFile represents a PO Gettext message file. * * @author Qiang Xue <qiang.xue@gmail.com> * @version $Id: CGettextPoFile.php 433 2008-12-30 22:59:17Z qiang.xue $ * @package system.i18n.gettext * @since 1.0 */ class CGettextPoFile extends CGettextFile { /** * Loads messages from a PO file. * @param string file path * @param string message context * @return array message translations (source message => translated message) */ public function load($file,$context) { $pattern='/msgctxt\s+"(.*?(?<!\\\\))"' . '\s+msgid\s+"(.*?(?<!\\\\))"' . '\s+msgstr\s+"(.*?(?<!\\\\))"/'; $content=file_get_contents($file); $n=preg_match_all($pattern,$content,$matches); $messages=array(); for($i=0;$i<$n;++$i) { if($matches[1][$i]===$context) { $id=$this->decode($matches[2][$i]); $message=$this->decode($matches[3][$i]); $messages[$id]=$message; } } return $messages; } /** * Saves messages to a PO file. * @param string file path * @param array message translations (message id => translated message). * Note if the message has a context, the message id must be prefixed with * the context with chr(4) as the separator. */ public function save($file,$messages) { $content=''; foreach($messages as $id=>$message) { if(($pos=strpos($id,chr(4)))!==false) { $content.='msgctxt "'.substr($id,0,$pos)."\"\n"; $id=substr($id,$pos+1); } $content.='msgid "'.$this->encode($id)."\"\n"; $content.='msgstr "'.$this->encode($message)."\"\n\n"; } file_put_contents($file,$content); } /** * Encodes special characters in a message. * @param string message to be encoded * @return string the encoded message */ protected function encode($string) { return str_replace(array('"', "\n", "\t", "\r"),array('\\"', "\\n", '\\t', '\\r'),$string); } /** * Decodes special characters in a message. * @param string message to be decoded * @return string the decoded message */ protected function decode($string) { return str_replace(array('\\"', "\\n", '\\t', '\\r'),array('"', "\n", "\t", "\r"),$string); } }